import UIKit

@available(iOS 9.0, *)
extension QKC where AA :UICollectionViewFocusUpdateContext {
    open func previouslyFocusedIndexPath_qk_g() -> QKC<AA,YY,ZZ, IndexPath? >{
		 self +^ self.value.previouslyFocusedIndexPath
	}

    open func nextFocusedIndexPath_qk_g() -> QKC<AA,YY,ZZ, IndexPath? >{
		 self +^ self.value.nextFocusedIndexPath
	}

}

@available(iOS 6.0, *)
extension QKC where AA :UICollectionView {
    open func collectionViewLayout_qk_s(_ collectionViewLayout:  UICollectionViewLayout) -> QKC<AA,YY,ZZ, UICollectionViewLayout>{
		return link(next: collectionViewLayout).then_QK { $0.value.collectionViewLayout = collectionViewLayout }
	}
    open func collectionViewLayout_qk_g() -> QKC<AA,YY,ZZ, UICollectionViewLayout>{
		 self +^ self.value.collectionViewLayout
	}

     open func delegate_qk_s(_ delegate:  UICollectionViewDelegate?) -> QKC<AA,YY,ZZ, UICollectionViewDelegate?>{
		return link(next: delegate).then_QK { $0.value.delegate = delegate }
	}
     open func delegate_qk_g() -> QKC<AA,YY,ZZ, UICollectionViewDelegate?>{
		 self +^ self.value.delegate
	}

     open func dataSource_qk_s(_ dataSource:  UICollectionViewDataSource?) -> QKC<AA,YY,ZZ, UICollectionViewDataSource?>{
		return link(next: dataSource).then_QK { $0.value.dataSource = dataSource }
	}
     open func dataSource_qk_g() -> QKC<AA,YY,ZZ, UICollectionViewDataSource?>{
		 self +^ self.value.dataSource
	}

    @available(iOS 10.0, *)
     open func prefetchDataSource_qk_s(_ prefetchDataSource:  UICollectionViewDataSourcePrefetching?) -> QKC<AA,YY,ZZ, UICollectionViewDataSourcePrefetching?>{
		return link(next: prefetchDataSource).then_QK { $0.value.prefetchDataSource = prefetchDataSource }
	}
    @available(iOS 10.0, *)
     open func prefetchDataSource_qk_g() -> QKC<AA,YY,ZZ, UICollectionViewDataSourcePrefetching?>{
		 self +^ self.value.prefetchDataSource
	}

    @available(iOS 10.0, *)
    open func isPrefetchingEnabled_qk_s(_ isPrefetchingEnabled:  Bool) -> QKC<AA,YY,ZZ, Bool>{
		return link(next: isPrefetchingEnabled).then_QK { $0.value.isPrefetchingEnabled = isPrefetchingEnabled }
	}
    @available(iOS 10.0, *)
    open func isPrefetchingEnabled_qk_g() -> QKC<AA,YY,ZZ, Bool>{
		 self +^ self.value.isPrefetchingEnabled
	}

    @available(iOS 11.0, *)
     open func dragDelegate_qk_s(_ dragDelegate:  UICollectionViewDragDelegate?) -> QKC<AA,YY,ZZ, UICollectionViewDragDelegate?>{
		return link(next: dragDelegate).then_QK { $0.value.dragDelegate = dragDelegate }
	}
    @available(iOS 11.0, *)
     open func dragDelegate_qk_g() -> QKC<AA,YY,ZZ, UICollectionViewDragDelegate?>{
		 self +^ self.value.dragDelegate
	}

    @available(iOS 11.0, *)
     open func dropDelegate_qk_s(_ dropDelegate:  UICollectionViewDropDelegate?) -> QKC<AA,YY,ZZ, UICollectionViewDropDelegate?>{
		return link(next: dropDelegate).then_QK { $0.value.dropDelegate = dropDelegate }
	}
    @available(iOS 11.0, *)
     open func dropDelegate_qk_g() -> QKC<AA,YY,ZZ, UICollectionViewDropDelegate?>{
		 self +^ self.value.dropDelegate
	}

	/**
     * @abstract Called when the interaction is about to "commit" in response to the user tapping the preview.
     *
     * @param collectionView  This UICollectionView.
     * @param configuration   Configuration of the currently displayed menu.
     * @param animator        Commit animator. Add animations to this object to run them alongside the commit transition.
     */
    @available(iOS 11.0, *)
    open func dragInteractionEnabled_qk_s(_ dragInteractionEnabled:  Bool) -> QKC<AA,YY,ZZ, Bool>{
		return link(next: dragInteractionEnabled).then_QK { $0.value.dragInteractionEnabled = dragInteractionEnabled }
	}
    @available(iOS 11.0, *)
    open func dragInteractionEnabled_qk_g() -> QKC<AA,YY,ZZ, Bool>{
		 self +^ self.value.dragInteractionEnabled
	}

	/**
     * @abstract Called when the interaction is about to "commit" in response to the user tapping the preview.
     *
     * @param collectionView  This UICollectionView.
     * @param configuration   Configuration of the currently displayed menu.
     * @param animator        Commit animator. Add animations to this object to run them alongside the commit transition.
     */
    @available(iOS 11.0, *)
    open func reorderingCadence_qk_s(_ reorderingCadence:  UICollectionView.ReorderingCadence) -> QKC<AA,YY,ZZ, UICollectionView.ReorderingCadence>{
		return link(next: reorderingCadence).then_QK { $0.value.reorderingCadence = reorderingCadence }
	}
    @available(iOS 11.0, *)
    open func reorderingCadence_qk_g() -> QKC<AA,YY,ZZ, UICollectionView.ReorderingCadence>{
		 self +^ self.value.reorderingCadence
	}

		// will be automatically resized to track the size of the collection view and placed behind all cells and supplementary views.
    open func backgroundView_qk_s(_ backgroundView:  UIView? ) -> QKC<AA,YY,ZZ, UIView? >{
		return link(next: backgroundView).then_QK { $0.value.backgroundView = backgroundView }
	}
    open func backgroundView_qk_g() -> QKC<AA,YY,ZZ, UIView? >{
		 self +^ self.value.backgroundView
	}

	// These properties control whether items can be selected, and if so, whether multiple items can be simultaneously selected.
		// default is YES
    open func allowsSelection_qk_s(_ allowsSelection:  Bool ) -> QKC<AA,YY,ZZ, Bool >{
		return link(next: allowsSelection).then_QK { $0.value.allowsSelection = allowsSelection }
	}
    open func allowsSelection_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.allowsSelection
	}

		// default is NO
    open func allowsMultipleSelection_qk_s(_ allowsMultipleSelection:  Bool ) -> QKC<AA,YY,ZZ, Bool >{
		return link(next: allowsMultipleSelection).then_QK { $0.value.allowsMultipleSelection = allowsMultipleSelection }
	}
    open func allowsMultipleSelection_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.allowsMultipleSelection
	}

		// returns nil or an array of selected index paths
    open func indexPathsForSelectedItems_qk_g() -> QKC<AA,YY,ZZ, [IndexPath]? >{
		 self +^ self.value.indexPathsForSelectedItems
	}

	// Returns YES if the collection view is reordering or has drop placeholders.
    @available(iOS 11.0, *)
    open func hasUncommittedUpdates_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.hasUncommittedUpdates
	}

	// Information about the current state of the collection view.
    open func numberOfSections_qk_g() -> QKC<AA,YY,ZZ, Int >{
		 self +^ self.value.numberOfSections
	}

    open func visibleCells_qk_g() -> QKC<AA,YY,ZZ, [UICollectionViewCell] >{
		 self +^ self.value.visibleCells
	}

    open func indexPathsForVisibleItems_qk_g() -> QKC<AA,YY,ZZ, [IndexPath] >{
		 self +^ self.value.indexPathsForVisibleItems
	}

	// Support for Focus
		// defaults to NO. If YES, when focusing on a collection view the last focused index path is focused automatically. If the collection view has never been focused, then the preferred focused index path is used.
    @available(iOS 9.0, *)
    open func remembersLastFocusedIndexPath_qk_s(_ remembersLastFocusedIndexPath:  Bool ) -> QKC<AA,YY,ZZ, Bool >{
		return link(next: remembersLastFocusedIndexPath).then_QK { $0.value.remembersLastFocusedIndexPath = remembersLastFocusedIndexPath }
	}
    @available(iOS 9.0, *)
    open func remembersLastFocusedIndexPath_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.remembersLastFocusedIndexPath
	}

	/**
     * @abstract Called when the interaction is about to "commit" in response to the user tapping the preview.
     *
     * @param collectionView  This UICollectionView.
     * @param configuration   Configuration of the currently displayed menu.
     * @param animator        Commit animator. Add animations to this object to run them alongside the commit transition.
     */
    @available(iOS 11.0, *)
    open func hasActiveDrag_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.hasActiveDrag
	}

	/**
     * @abstract Called when the interaction is about to "commit" in response to the user tapping the preview.
     *
     * @param collectionView  This UICollectionView.
     * @param configuration   Configuration of the currently displayed menu.
     * @param animator        Commit animator. Add animations to this object to run them alongside the commit transition.
     */
    @available(iOS 11.0, *)
    open func hasActiveDrop_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.hasActiveDrop
	}

	// If a class is registered, it will be instantiated via alloc/initWithFrame:
    open func register_qk_f(_ cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String) -> QKC<AA,YY,ZZ, AnyClass?>{
		 self +^ self.value.register(cellClass, forCellWithReuseIdentifier:identifier) +^ cellClass
	}

    open func register_qk_f(_ nib: UINib?, forCellWithReuseIdentifier identifier: String) -> QKC<AA,YY,ZZ, UINib?>{
		 self +^ self.value.register(nib, forCellWithReuseIdentifier:identifier) +^ nib
	}

    open func register_qk_f(_ viewClass: AnyClass?, forSupplementaryViewOfKind elementKind: String, withReuseIdentifier identifier: String) -> QKC<AA,YY,ZZ, AnyClass?>{
		 self +^ self.value.register(viewClass, forSupplementaryViewOfKind:elementKind, withReuseIdentifier:identifier) +^ viewClass
	}

    open func register_qk_f(_ nib: UINib?, forSupplementaryViewOfKind kind: String, withReuseIdentifier identifier: String) -> QKC<AA,YY,ZZ, UINib?>{
		 self +^ self.value.register(nib, forSupplementaryViewOfKind:kind, withReuseIdentifier:identifier) +^ nib
	}

    open func dequeueReusableCell_qk_f(withReuseIdentifier identifier: String, for indexPath: IndexPath) -> QKC<AA,YY,ZZ,UICollectionViewCell>{
		 self +^ self.value.dequeueReusableCell(withReuseIdentifier:identifier, for:indexPath)
	}

    open func dequeueReusableSupplementaryView_qk_f(ofKind elementKind: String, withReuseIdentifier identifier: String, for indexPath: IndexPath) -> QKC<AA,YY,ZZ,UICollectionReusableView>{
		 self +^ self.value.dequeueReusableSupplementaryView(ofKind:elementKind, withReuseIdentifier:identifier, for:indexPath)
	}

    open func selectItem_qk_f(at indexPath: IndexPath?, animated: Bool, scrollPosition: UICollectionView.ScrollPosition) -> QKC<AA,YY,ZZ, IndexPath?>{
		 self +^ self.value.selectItem(at:indexPath, animated:animated, scrollPosition:scrollPosition) +^ indexPath
	}

    open func deselectItem_qk_f(at indexPath: IndexPath, animated: Bool) -> QKC<AA,YY,ZZ, IndexPath>{
		 self +^ self.value.deselectItem(at:indexPath, animated:animated) +^ indexPath
	}

	// Note: -reloadData will discard any uncommitted updates (e.g. placeholders)
		// discard the dataSource and delegate data and requery as necessary
    open func reloadData_qk_f() -> QKC<AA,YY,ZZ,Void>{
		 self +^ self.value.reloadData()
	}

		// transition from one layout to another
    open func setCollectionViewLayout_qk_f(_ layout: UICollectionViewLayout, animated: Bool) -> QKC<AA,YY,ZZ, UICollectionViewLayout>{
		 self +^ self.value.setCollectionViewLayout(layout, animated:animated) +^ layout
	}

    @available(iOS 7.0, *)
    open func setCollectionViewLayout_qk_f(_ layout: UICollectionViewLayout, animated: Bool, completion: ((Bool) -> Void)? = nil) -> QKC<AA,YY,ZZ, UICollectionViewLayout>{
		 self +^ self.value.setCollectionViewLayout(layout, animated:animated, completion:completion) +^ layout
	}

    @available(iOS 7.0, *)
    open func startInteractiveTransition_qk_f(to layout: UICollectionViewLayout, completion: UICollectionView.LayoutInteractiveTransitionCompletion? = nil) -> QKC<AA,YY,ZZ,UICollectionViewTransitionLayout>{
		 self +^ self.value.startInteractiveTransition(to:layout, completion:completion)
	}

    @available(iOS 7.0, *)
    open func finishInteractiveTransition_qk_f() -> QKC<AA,YY,ZZ,Void>{
		 self +^ self.value.finishInteractiveTransition()
	}

    @available(iOS 7.0, *)
    open func cancelInteractiveTransition_qk_f() -> QKC<AA,YY,ZZ,Void>{
		 self +^ self.value.cancelInteractiveTransition()
	}

    open func numberOfItems_qk_f(inSection section: Int) -> QKC<AA,YY,ZZ,Int>{
		 self +^ self.value.numberOfItems(inSection:section)
	}

    open func layoutAttributesForItem_qk_f(at indexPath: IndexPath) -> QKC<AA,YY,ZZ,UICollectionViewLayoutAttributes?>{
		 self +^ self.value.layoutAttributesForItem(at:indexPath)
	}

    open func layoutAttributesForSupplementaryElement_qk_f(ofKind kind: String, at indexPath: IndexPath) -> QKC<AA,YY,ZZ,UICollectionViewLayoutAttributes?>{
		 self +^ self.value.layoutAttributesForSupplementaryElement(ofKind:kind, at:indexPath)
	}

    open func indexPathForItem_qk_f(at point: CGPoint) -> QKC<AA,YY,ZZ,IndexPath?>{
		 self +^ self.value.indexPathForItem(at:point)
	}

    open func indexPath_qk_f(for cell: UICollectionViewCell) -> QKC<AA,YY,ZZ,IndexPath?>{
		 self +^ self.value.indexPath(for:cell)
	}

    open func cellForItem_qk_f(at indexPath: IndexPath) -> QKC<AA,YY,ZZ,UICollectionViewCell?>{
		 self +^ self.value.cellForItem(at:indexPath)
	}

    @available(iOS 9.0, *)
    open func supplementaryView_qk_f(forElementKind elementKind: String, at indexPath: IndexPath) -> QKC<AA,YY,ZZ,UICollectionReusableView?>{
		 self +^ self.value.supplementaryView(forElementKind:elementKind, at:indexPath)
	}

    @available(iOS 9.0, *)
    open func visibleSupplementaryViews_qk_f(ofKind elementKind: String) -> QKC<AA,YY,ZZ,[UICollectionReusableView]>{
		 self +^ self.value.visibleSupplementaryViews(ofKind:elementKind)
	}

    @available(iOS 9.0, *)
    open func indexPathsForVisibleSupplementaryElements_qk_f(ofKind elementKind: String) -> QKC<AA,YY,ZZ,[IndexPath]>{
		 self +^ self.value.indexPathsForVisibleSupplementaryElements(ofKind:elementKind)
	}

	// Interacting with the collection view.
    open func scrollToItem_qk_f(at indexPath: IndexPath, at scrollPosition: UICollectionView.ScrollPosition, animated: Bool) -> QKC<AA,YY,ZZ, IndexPath>{
		 self +^ self.value.scrollToItem(at:indexPath, at:scrollPosition, animated:animated) +^ indexPath
	}

	// These methods allow dynamic modification of the current set of items in the collection view
    open func insertSections_qk_f(_ sections: IndexSet) -> QKC<AA,YY,ZZ, IndexSet>{
		 self +^ self.value.insertSections(sections) +^ sections
	}

    open func deleteSections_qk_f(_ sections: IndexSet) -> QKC<AA,YY,ZZ, IndexSet>{
		 self +^ self.value.deleteSections(sections) +^ sections
	}

    open func reloadSections_qk_f(_ sections: IndexSet) -> QKC<AA,YY,ZZ, IndexSet>{
		 self +^ self.value.reloadSections(sections) +^ sections
	}

    open func moveSection_qk_f(_ section: Int, toSection newSection: Int) -> QKC<AA,YY,ZZ, Int>{
		 self +^ self.value.moveSection(section, toSection:newSection) +^ section
	}

    open func insertItems_qk_f(at indexPaths: [IndexPath]) -> QKC<AA,YY,ZZ, [IndexPath]>{
		 self +^ self.value.insertItems(at:indexPaths) +^ indexPaths
	}

    open func deleteItems_qk_f(at indexPaths: [IndexPath]) -> QKC<AA,YY,ZZ, [IndexPath]>{
		 self +^ self.value.deleteItems(at:indexPaths) +^ indexPaths
	}

    open func reloadItems_qk_f(at indexPaths: [IndexPath]) -> QKC<AA,YY,ZZ, [IndexPath]>{
		 self +^ self.value.reloadItems(at:indexPaths) +^ indexPaths
	}

    open func moveItem_qk_f(at indexPath: IndexPath, to newIndexPath: IndexPath) -> QKC<AA,YY,ZZ, IndexPath>{
		 self +^ self.value.moveItem(at:indexPath, to:newIndexPath) +^ indexPath
	}

		// allows multiple insert/delete/reload/move calls to be animated simultaneously. Nestable.
    open func performBatchUpdates_qk_f(_ updates: (() -> Void)?, completion: ((Bool) -> Void)? = nil) -> QKC<AA,YY,ZZ,Void>{
		 self +^ self.value.performBatchUpdates(updates, completion:completion)
	}

	// Support for reordering
		// returns NO if reordering was prevented from beginning - otherwise YES
    @available(iOS 9.0, *)
    open func beginInteractiveMovementForItem_qk_f(at indexPath: IndexPath) -> QKC<AA,YY,ZZ,Bool >{
		 self +^ self.value.beginInteractiveMovementForItem(at:indexPath)
	}

    @available(iOS 9.0, *)
    open func updateInteractiveMovementTargetPosition_qk_f(_ targetPosition: CGPoint) -> QKC<AA,YY,ZZ, CGPoint>{
		 self +^ self.value.updateInteractiveMovementTargetPosition(targetPosition) +^ targetPosition
	}

    @available(iOS 9.0, *)
    open func endInteractiveMovement_qk_f() -> QKC<AA,YY,ZZ,Void>{
		 self +^ self.value.endInteractiveMovement()
	}

    @available(iOS 9.0, *)
    open func cancelInteractiveMovement_qk_f() -> QKC<AA,YY,ZZ,Void>{
		 self +^ self.value.cancelInteractiveMovement()
	}

}

@available(iOS 11.0, *)
extension QKC where AA :UICollectionViewDropProposal {
	/**
     * @abstract Called when the interaction is about to "commit" in response to the user tapping the preview.
     *
     * @param collectionView  This UICollectionView.
     * @param configuration   Configuration of the currently displayed menu.
     * @param animator        Commit animator. Add animations to this object to run them alongside the commit transition.
     */
    open func intent_qk_g() -> QKC<AA,YY,ZZ, UICollectionViewDropProposal.Intent >{
		 self +^ self.value.intent
	}

}

@available(iOS 11.0, *)
extension QKC where AA :UICollectionViewPlaceholder {
	/**
     * @abstract Called when the interaction is about to "commit" in response to the user tapping the preview.
     *
     * @param collectionView  This UICollectionView.
     * @param configuration   Configuration of the currently displayed menu.
     * @param animator        Commit animator. Add animations to this object to run them alongside the commit transition.
     */
    open func cellUpdateHandler_qk_s(_ cellUpdateHandler:  ((UICollectionViewCell) -> Void)?) -> QKC<AA,YY,ZZ, ((UICollectionViewCell) -> Void)?>{
		return link(next: cellUpdateHandler).then_QK { $0.value.cellUpdateHandler = cellUpdateHandler }
	}
    open func cellUpdateHandler_qk_g() -> QKC<AA,YY,ZZ, ((UICollectionViewCell) -> Void)?>{
		 self +^ self.value.cellUpdateHandler
	}

}

@available(iOS 11.0, *)
extension QKC where AA :UICollectionViewDropPlaceholder {
	/**
     * @abstract Called when the interaction is about to "commit" in response to the user tapping the preview.
     *
     * @param collectionView  This UICollectionView.
     * @param configuration   Configuration of the currently displayed menu.
     * @param animator        Commit animator. Add animations to this object to run them alongside the commit transition.
     */
    open func previewParametersProvider_qk_s(_ previewParametersProvider:  ((UICollectionViewCell) -> UIDragPreviewParameters?)?) -> QKC<AA,YY,ZZ, ((UICollectionViewCell) -> UIDragPreviewParameters?)?>{
		return link(next: previewParametersProvider).then_QK { $0.value.previewParametersProvider = previewParametersProvider }
	}
    open func previewParametersProvider_qk_g() -> QKC<AA,YY,ZZ, ((UICollectionViewCell) -> UIDragPreviewParameters?)?>{
		 self +^ self.value.previewParametersProvider
	}

}

